<?php
class CamposController extends AppController {

	var $name = 'Campos';
    var $uses = array('Campo','Typecampo','Modeloformulario','Sign','Formularioscampo','Vademecum','Problem');

    function beforeFilter () {
        parent::beforeFilter();
    }
    
	function index() {
        $this->set('title_nav_bar','Campos');

		if ( isset( $_POST['filtro'] ) ) { 
			$filtro=$_POST['filtro']; 
		} else { 
			if (isset($_SESSION['filtro']) ) {
				$filtro = $_SESSION['filtro'];	
			} else {
				$filtro='';	
			}
		}

		$_SESSION['filtro'] = $filtro;
		$this->set('filtro',$filtro);
		$this->set('campos', $this->paginate('Campo', 
												array( 'OR' => array(
																'Campo.name LIKE' => "%$filtro%",
																'Campo.label LIKE' => "%$filtro%",
																'Campo.comentario LIKE' => "%$filtro%",
																'Campo.ayuda LIKE' => "%$filtro%",
																'Campo.tags LIKE' => "%$filtro%"
															)
													)
											)
					);

	}

	function limpiar_filtro() {
		$_SESSION['filtro'] = '';
		$this -> redirect(array('action'=>'index'));
		exit();                
	}


    function edit($id=0) {

        if (isset($this->data['Campo']['save_apply'])) {
//pr($_POST); die();
			if ( ($this->data['Campo']['typecampo_id']==6 or $this->data['Campo']['typecampo_id']==7) 
					and !empty($this->data['Options']) ) {
				//--------------------------------------------------------------------------------------------------
				//                                                           Tipo de Campo: Lista Simple / Multiple
				//--------------------------------------------------------------------------------------------------
				//pr($this->data['Options']); die();
				foreach($this->data['Options'] as $clave=>$valor){
					if(!isset($valor['seleccionado'])){
						$this->data['Options'][$clave]['seleccionado'] = 0;
					}
				}
				
				$options = json_encode($this->data['Options']);
				

			} elseif ( ($this->data['Campo']['typecampo_id']==9 or $this->data['Campo']['typecampo_id']==10) 
						and !empty($this->data['OptionManual']) ) {
				//--------------------------------------------------------------------------------------------------
				//                                                 Tipo de Campo: Lista Simple / Multiple -> Manual
				//--------------------------------------------------------------------------------------------------

				foreach($this->data['OptionManual'] as $clave=>$valor){
					if(!isset($valor['seleccionado'])){
						$this->data['OptionManual'][$clave]['seleccionado'] = 0;
					}
				}
				//pr($this->data['OptionManual']); die();				
				$options = json_encode($this->data['OptionManual']);
				$this->data['Campo']['modeloformulario_id'] = 6; // Ficha
                $this->data['Campo']['name']                = 'ficha';


			} elseif ( $this->data['Campo']['typecampo_id']==14)  {
				//--------------------------------------------------------------------------------------------------
				//                                                 Tipo de Campo: Formula
				//--------------------------------------------------------------------------------------------------
				$options = "";
				$this->data['Campo']['modeloformulario_id'] = 6; // Ficha
                $this->data['Campo']['name']                = 'ficha';


			} elseif  ( $this->data['Campo']['typecampo_id']==2 ) {
			
				//--------------------------------------------------------------------------------------------------
				//                                                                           Tipo de Campo: Booleano
				//--------------------------------------------------------------------------------------------------
				if ($this->data['Campo']['modeloformulario_id'] == 1) {
					//------------------------------------------------------------------------------------ Problemas
					$options[$this->data['Campo']['modelo_id']]['nombre'] = $this->data['Campo']['modelo_name'];
					$options[$this->data['Campo']['modelo_id']]['state_problem_id'] = $_POST['state_problem_id'];
					$options[$this->data['Campo']['modelo_id']]['tag_id']           = $_POST['tag_id'];
				} elseif ($this->data['Campo']['modeloformulario_id'] == 3) {
					//--------------------------------------------------------------------------------- Medicamentos
					$options[$this->data['Campo']['modelo_id']]['nombre'] = $this->data['Campo']['modelo_name'];
					$options[$this->data['Campo']['modelo_id']]['indicacion_id'] = $_POST['indicacion_id'];
				} 
				
				$options = json_encode($options);

			} elseif  ( $this->data['Campo']['typecampo_id']==11 ) {
				//--------------------------------------------------------------------------------------------------
				//                                                                    Tipo de Campo: Buscador Simple
				//--------------------------------------------------------------------------------------------------
				if ($this->data['Campo']['modeloformulario_id'] == 1) {
					//------------------------------------------------------------------------------------ Problemas
					$options['state_problem_id'] = $_POST['state_problem_id'];
					$options['tag_id']           = $_POST['tag_id'];
				}

				if ($this->data['Campo']['modeloformulario_id'] == 3) {
					//--------------------------------------------------------------------------------- Medicamentos
					$options['indicacion_id'] = $_POST['indicacion_id'];
				}

				$options = json_encode($options);

			} else {
				$options = '';
			}

			$this->data['Campo']['options_encode'] = $options;

//pr($this->data); die();
				
            if ($this->Campo->save($this->data['Campo'])) {
                $this->Session->setFlash(__('Guardado correctamente', true));
                $this -> redirect(array('action'=>'index'));
                exit();                
            } else {
                $this->Session->setFlash(__('No se pudo guardar el formulario.', true));
            }  
			
        } else {
            
            if ($id == 0) {
                $this->set('title_nav_bar','Crear un Campo');
                // Nuevo Formulario
                // obtain default values for new form
                $T = $this->Campo->_schema;
                foreach($T as $clave => $valor) { $this->data['Campo'][$clave] = $valor['default']; }
                $this->data['Campo']['id'] = 0;    
				$this->data['Options'] = array();    

            } else {
                $this->set('title_nav_bar','Editar Campo (id:'.$id.')');
                $this->data= $this->Campo->read(null, $id);
				$this->data['Options'] = json_decode($this->data['Campo']['options_encode'],true);    
				//$Opciones = $this->data['Options'];
				
				//------------------------------------------------------
				// Correccion para campos lista
				if($this->data['Campo']['typecampo_id']==7){
				
					if($this->data['Campo']['modeloformulario_id']==3){
						
						//------------------------------- Medicamentos
						// $Opciones[Vademecums.Id][indicacion_id] = typeindicacionmedicamentos.id
						// $Opciones[Vademecums.Id][nombre]        = Vademecums.name + Vademecums.Presentacion
						$this->Vademecum->recursive = -1;
						foreach($this->data['Options'] as $clave=>$valor){
						
							if( strlen($valor['nombre'])<2) {
								//------------------------------------------------------
								//                 Busco la descripcion del medicamento
								//------------------------------------------------------		
								$x = $this->Vademecum->read(null,$clave);
								$nombre = $x['Vademecum']['name'].' '.$x['Vademecum']['presentacion'];
								
								$this->data['Options'][$clave]['nombre'] = $nombre; 
								$this->data['Options'][$clave]['indicacion_id'] = 0; 								
							
							}
							
						}	// endforeach
						
					} elseif($this->data['Campo']['modeloformulario_id']==1){
						
						//------------------------------- Problemas
						// $Opciones[Problems.Id][state_problem_id] = Stateproblems.id
						// $Opciones[Problems.Id][tag_id]           = Tags.id
						// $Opciones[Problems.Id][nombre]           = Problems.name
						$this->Problem->recursive = -1;
						$Opciones = $this->data['Options'];
						
						unset($this->data['Options']);
						foreach($Opciones as $key=>$value){ 
							if( $value['tag_id']<1 ) { 
								//------------------------------------------------------
								//                 Busco la descripcion del Problema
								//------------------------------------------------------		
								$x = $this->Problem->read(null,$key);
								
								$nombre = $x['Problem']['name'];
								
								$this->data['Options'][$key]['nombre'] = $nombre; 
								$this->data['Options'][$key]['state_problem_id'] = $value['state_problem_id']; 
								$this->data['Options'][$key]['tag_id'] = $value['tag_id']; 
								if(isset($value['seleccionado'])) {
									$this->data['Options'][$key]['seleccionado'] = $value['seleccionado']; 
								} else {
									$this->data['Options'][$key]['seleccionado'] = 0; 
								}
														
							
							} else {
								$this->data['Options'][$key] = $value; 								
							}

						}	// endforeach
						//pr($this->data['Options']);						
					}	
				
				
				} elseif($this->data['Campo']['typecampo_id']==9 or $this->data['Campo']['typecampo_id']==10){
					//-------------- Lista simple, valores manuales
					//pr($this->data['Options']);
					$OptionesManuales = array();					
					foreach($this->data['Options'] as $clavez=>$valorz){
						
						if( count($valorz)==1 ) {
							$OptionesManuales[$clavez]['nombre'] = $valorz; 
							$OptionesManuales[$clavez]['seleccionado'] = 0; 								
						
						} else {
							$OptionesManuales[$clavez] = $valorz;
						}
					}	// endforeach

					$this->set('OptionesManuales',$OptionesManuales);    
					
				}
				
				$formularios = $this->Formularioscampo->find('all', array( 'conditions' => array('Formularioscampo.campo_id' => $id) ) );
				$this->set(compact('formularios'));    
            }

            

            
            //-- Tipos de Campos
			$type_campos = $this->Typecampo->find('all');
            $this->set(compact('type_campos'));    
           
            //-- Modelos de Formulario
            $modelos_formularios = $this->Modeloformulario->find('all');
            $this->set(compact('modelos_formularios'));        
            
        }
        
		// Traigo los StateProblems
		$this->loadModel('Stateproblem');
		$x = $this->Stateproblem->find('all', array( 'order' => array('Stateproblem.name') )) ;
		$state_problems = array();
		$state_problems[0] = "Sin Definir";
		foreach($x as $z){
			$state_problems[$z['Stateproblem']['id']] = $z['Stateproblem']['name'];
		}


		$this->set('StateProblems', $state_problems);
		
		// Traigo los Tags para mostrar en el Evolucionador
		$this->loadModel('Tag');
		$x = $this->Tag->find('all', array( 'order' => array('Tag.name') )) ;
		$tags = array();
		$tags[0] = '--';
		foreach($x as $z){
			$tags[$z['Tag']['id']] = $z['Tag']['name'];
		}

		$this->set('Tags', $tags);

		// Traigo los Typeindicacionmedicamento
		$this->loadModel('Typeindicacionmedicamento');
//		$Typeindicacionmedicamento = $this->Typeindicacionmedicamento->find('all', array('order' => array('Typeindicacionmedicamento.name') )) ;
		$x = $this->Typeindicacionmedicamento->find('all', array('order' => array('Typeindicacionmedicamento.name') )) ;		
		$Indicaciones = array();
		$Indicaciones[0] = "Sin Definir";
		foreach($x as $z){
			$Indicaciones[$z['Typeindicacionmedicamento']['id']] = $z['Typeindicacionmedicamento']['name'];
		}

		$this->set('Indicaciones', $Indicaciones);


    }


	function delete() {

		if (empty($this->data['Delete'])) {
			$this->Session->setFlash(__('Debe seleccionar un Campo', true));
			$this->redirect(array('action'=>'index'));
		} else {
 
            foreach($this->data['Delete'] as $key=>$value) {
                if ($value==1) { 
                    $this->Campo->delete($key,true); 
                }
            }
            $this->Session->setFlash(__('Campo eliminado', true));
    		$this->redirect(array('action'=>'index'));

		} 
	}
	
	
	
    function autocomplete_segun_modelo($modeloformulario_id=0) {
		$this->layout = 'ajax';
		$this->autoRender=false;

		$text = trim($_GET['q']);

		if (!empty($text)) {

			if ($modeloformulario_id==1 or $modeloformulario_id==5 ) {
					// Obtengo todos los Problemas desde el Solr
					$resultado = json_decode($this->requestAction('/problems/obtenerDatossolr/'.$text));
					
					if ($resultado->response->docs) {
						$contador = 0;
						foreach($resultado->response->docs as $r) {
							$contador++;
							if($contador != 1){ echo ',';}
							echo '{"name": "'.$r->name.'","id": "'.$r->id.'"}';
						}
					}



			} elseif($modeloformulario_id==2) {
				// Signos Vitales
				$options   = array('conditions' => array('Sign.name LIKE' => "%$text%"), 'limit' => 10);
				$resultado = $this->Sign->find('all',$options);
				if ($resultado) {
					$contador = 0;
					foreach($resultado as $r) {
						$contador++;
						if($contador != 1){ echo ',';}
						echo '{"name": "'.$r['Sign']['name'].'","id": "'.$r['Sign']['id'].'"}';
					}

				}
			
			} elseif($modeloformulario_id==3) {

				// Medicamentos desde el Solr
				$resultado = json_decode($this->requestAction('/vademecums/obtenerDatossolr/'.$text));
				if ($resultado->response->docs) {
					$contador = 0;
					foreach($resultado->response->docs as $r) {
						$contador++;
						if($contador != 1){ echo ',';}
						echo '{"name": "'.$r->name.' '.$r->presentacion.'","id": "'.$r->id.'"}';
					}
				}

			} elseif($modeloformulario_id==4 or $modeloformulario_id==7) {

				// Obtengo todos las Practicas desde el Solr
				$resultado = json_decode($this->requestAction('/practices/obtenerDatossolr/'.$text));

				if ($resultado->response->docs) {
					$contador = 0;
					foreach($resultado->response->docs as $r) {
						$contador++;
						if($contador != 1){ echo ',';}
						echo '{"name": "'.$r->name.'","id": "'.$r->id.'"}';
					}
				}
				
			}
		}
	}
	

}
